package command;

/**
 * 遥控器
 * @author DFD
 * @date 2023年11月21日
 */

public class RemoteController {
	// 开按钮命令
	Command[] onCommands;
	Command[] offCommands;

	// 撤销命令
	Command undoCommand;

	public RemoteController() {
		onCommands = new Command[5];
		offCommands = new Command[5];
		for (int i = 0; i < 5; i++) {
			onCommands[i] = new NoCommand();
			offCommands[i] = new NoCommand();
		}
	}

	/**
	 * 给按钮设置命令
	 * @param no			第几行
	 * @param onCommand		开启命令
	 * @param offCommand	关闭命令
	 */
	public void setCommand(int no, Command onCommand, Command offCommand) {
		onCommands[no] = onCommand;
		offCommands[no] = offCommand;
	}

	/**
	 * 当打开的按钮被点击
	 * @param no	第几行
	 */
	public void onButtonClicked(int no) {
		// 找到你按下的开的按钮， 并调用对应方法
		onCommands[no].execute();
		// 记录这次的操作，用于撤销
		undoCommand = onCommands[no];
	}

	/**
	 * 当关闭打开的按钮被点击
	 * @param no	第几行
	 */
	public void offButtonClicked(int no) {
		// 找到你按下的开的按钮， 并调用对应方法
		offCommands[no].execute();
		// 记录这次的操作，用于撤销
		undoCommand = offCommands[no];
	}

	/**
	 * 当撤销的按钮被点击
	 * @param no	第几行
	 */
	public void undoButtonClicked(int no) {
		undoCommand.undo();
	}
}
